package com.xyz;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
// 实现 StudentDAO 接口中的方法，创建自定义的 JDBCTemplate 类
public class StudentJDBCTemplate implements StudentDAO {
    // 声明私有字段 数据源对象，用来从 Beans.xml 中读取默认的字段值，
    // 创建数据库连接
    private DataSource dataSource;
    // 创建 spring 的 JdbcTemplate 对象，用来进行数据库操作
    private JdbcTemplate jdbcTemplateObject;
    // setter 注入 DataSource
    // 同时注入了 JdbcTemplate
    // 这就是用一个 setter 注入了两个类实例 bean
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
        this.jdbcTemplateObject = new JdbcTemplate(dataSource);
    }
    // 实现数据插入接口
    public void create(String name, Integer age) {
        // inset 语句，后面用了两个参数
        String SQL = "insert into Student (name, age) values (?, ?)";
        // JdbcTemplate 的 update 方法用来执行更改数据库数据的操作：插入、删除或更新
        // 第一个参数是要执行的 SQL 语句
        // 后面可以有0个或多个参数，对应于 Sql 语句中的参数，按顺序排
        jdbcTemplateObject.update( SQL, name, age);
        System.out.println("Created Record Name = " + name + " Age = " + age);
        return;
    }
    // 实现根据 id 查找学生的方法
    public Student getStudent(Integer id) {
        String SQL = "select * from Student where id = ?";
        Student student = jdbcTemplateObject.queryForObject(SQL,
                new Object[]{id}, new StudentMapper());
        return student;
    }
    // 查找全部学生
    public List<Student> listStudents() {
        String SQL = "select * from Student";
        List <Student> students = jdbcTemplateObject.query(SQL,
                new StudentMapper());
        return students;
    }
    // 删除指定 id 的学生
    public void delete(Integer id){
        String SQL = "delete from Student where id = ?";
        jdbcTemplateObject.update(SQL, id);
        System.out.println("Deleted Record with ID = " + id );
        return;
    }
    // 根据 id 更新年龄
    public void update(Integer id, Integer age){
        String SQL = "update Student set age = ? where id = ?";
        jdbcTemplateObject.update(SQL, age, id);
        System.out.println("Updated Record with ID = " + id );
        return;
    }
}
